iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 3
0
AI & Data

從根本學習Reinforcement Learning系列 第 3

[Day03]貝爾曼方程

  • 分享至 

  • xImage
  •  

前言

很多常見的強化學習算法都是根據貝爾曼方程來的,我們可以把強化學習的目標,用Value Function來表示。之後我們只要求這個Value Function的解就能間接找到強化學習的最佳解,而要求Value Function的解,就必須經過貝爾曼方程來簡化它!!

Episodic and Continuing Task

先來看兩種強化學習的環境

  • Episodic Tasks
  • Continuing Tasks

Episodic Tasks表示環境中必須存在Final State,只要時間夠久,最後一定可以結束。我們稱這從開始到結束為1個Episode。像是棋盤遊戲,或是走迷宮等等。

而Continuing Tasks就是除了Episodic Tasks以外的所有Task,或著可以想像成到https://chart.googleapis.com/chart?cht=tx&chl=T%20%5Cto%20%5Cinfty還無法終止的環境。

可以透過自行定義改變環境的種類,像是我們常會把Continuing Task設定跑固定個時間點後結束,就成了Episodic Tasks

Expected Return

現在我們來用數學公式描述之前提到的強化學習的目標,我們說過最大化的目標必須是時間點https://chart.googleapis.com/chart?cht=tx&chl=t之後的Reward總和,我們稱這個目標為Expected return,用符號G來表示:

https://chart.googleapis.com/chart?cht=tx&chl=G_%7Bt%7D%20%3D%20R_%7Bt%2B1%7D%20%2B%20R_%7Bt%2B2%7D%20%2B%20R_%7Bt%2B3%7D%20%2B%20%5Cldots%20%2B%20R_%7BT%7Dhttps://chart.googleapis.com/chart?cht=tx&chl=t表示在時間點https://chart.googleapis.com/chart?cht=tx&chl=thttps://chart.googleapis.com/chart?cht=tx&chl=T則表示最後Final State的時間點。

可以看到Continuing Tasks不滿足上面這個公式,因為https://chart.googleapis.com/chart?cht=tx&chl=T%20%5Cto%20%5Cinfty的話https://chart.googleapis.com/chart?cht=tx&chl=G_%7Bt%7D就不會收斂,所以我們引進一個衰減值https://chart.googleapis.com/chart?cht=tx&chl=%5Cgamma%5C%20%2C%20%5C%200%20%5Cleq%20%5Cgamma%20%5Cleq%201https://chart.googleapis.com/chart?cht=tx&chl=%5Cgamma的用途除了讓Continuing Tasks收斂外,也能表示對未來的重視程度https://chart.googleapis.com/chart?cht=tx&chl=%5Cgamma越高,表示考慮到的未來越多,https://chart.googleapis.com/chart?cht=tx&chl=%5Cgamma越低,表示越重視眼前的目標。

從更新後的Expected return來看:
https://chart.googleapis.com/chart?cht=tx&chl=G_%7Bt%7D%20%3D%20R_%7Bt%2B1%7D%20%2B%20%5Cgamma%20R_%7Bt%2B2%7D%20%2B%20%5Cgamma%5E2%20R_%7Bt%2B3%7D%20%2B%20%5Cldots%20%2B%20%5Cgamma%5E%7BT-t-1%7D%20R_%7BT%7D%20%3D%20%5Csum%5Climits_%7Bk%3D0%7D%5E%7BT-t-1%7D%20%5Cgamma%5E%7Bk%7D%20R_%7Bt%2Bk%2B1%7D
https://chart.googleapis.com/chart?cht=tx&chl=%5Cgammahttps://chart.googleapis.com/chart?cht=tx&chl=G_%7Bt%7D的影響可以從下面兩個極端值理解:

  • https://chart.googleapis.com/chart?cht=tx&chl=%5Cgamma%20%3D%201%2C%5C%20%5C%20G_%7Bt%7D%3DR_%7Bt%2B1%7D%20%2B%20R_%7Bt%2B2%7D%20%2B%20%5Cldots%20%2B%20R_%7BT%7D
  • https://chart.googleapis.com/chart?cht=tx&chl=%5Cgamma%20%3D%200%2C%5C%20%5C%20G_%7Bt%7D%3DR_%7Bt%2B1%7D

而環境對https://chart.googleapis.com/chart?cht=tx&chl=%5Cgamma範圍的影響如下:

  • 當環境為Continuing Tasks時,https://chart.googleapis.com/chart?cht=tx&chl=T%20%5Cto%20%5Cinfty,此時https://chart.googleapis.com/chart?cht=tx&chl=%5Cgamma範圍為 https://chart.googleapis.com/chart?cht=tx&chl=0%20%5Cleq%20%5Cgamma%20%3C%201
  • 當環境為Episodic Tasks時,https://chart.googleapis.com/chart?cht=tx&chl=T%20%5Cnot%5Cto%20%5C%20%5C%20%5Cinfty,此時https://chart.googleapis.com/chart?cht=tx&chl=%5Cgamma範圍為 https://chart.googleapis.com/chart?cht=tx&chl=0%20%5Cleq%20%5Cgamma%20%5Cleq%201

策略(Policy)

Policy是用來表示我們Agent在某狀態下行為的機率,符號為https://chart.googleapis.com/chart?cht=tx&chl=%5Cpi。其本質上就是一個從State映射到Action上的函數。從機率形式上比較容易理解:https://chart.googleapis.com/chart?cht=tx&chl=%5Cpi(a%5Cmid%20s)表示在https://chart.googleapis.com/chart?cht=tx&chl=s這個State上,做行為https://chart.googleapis.com/chart?cht=tx&chl=a的機率。
可以從下面的圖來看:
https://ithelp.ithome.com.tw/upload/images/20200903/20129922d7XQlzVYWG.png
現在Agent在圖中https://chart.googleapis.com/chart?cht=tx&chl=s_%7B5%7D的位置,有4個行為(Left, Right, Top, Down)。現在Agent的policy為隨機策略,選擇Left, Right, Top, Down的機率皆為25%,所以https://chart.googleapis.com/chart?cht=tx&chl=%5Cpi的機率分布為以下四種:

  • https://chart.googleapis.com/chart?cht=tx&chl=%5Cpi(a_%7Bleft%7D%5C%20%5Cmid%5C%20%5C%20%20s_%7B5%7D)%20%3D%2025%5C%25
  • https://chart.googleapis.com/chart?cht=tx&chl=%5Cpi(a_%7Bright%7D%5C%20%5Cmid%5C%20%5C%20%20s_%7B5%7D)%20%3D%2025%5C%25
  • https://chart.googleapis.com/chart?cht=tx&chl=%5Cpi(a_%7Btop%7D%5C%20%5Cmid%5C%20%5C%20%20s_%7B5%7D)%20%3D%2025%5C%25
  • https://chart.googleapis.com/chart?cht=tx&chl=%5Cpi(a_%7Bdown%7D%5C%20%5Cmid%5C%20%5C%20%20s_%7B5%7D)%20%3D%2025%5C%25

價值函數(Value Function) 與 動作價值函數(Action Value Function)

我們重新來看一下Expected Return的定義,在某個時間點https://chart.googleapis.com/chart?cht=tx&chl=t後的Reward總和。好像哪裡怪怪的?每個時間點https://chart.googleapis.com/chart?cht=tx&chl=t所在的State可能都不一樣,而Action又必須根據State來選擇,那怎麼能只用時間https://chart.googleapis.com/chart?cht=tx&chl=t的Return來當作目標勒?所以我們用一個新的Function來表示在某個State底下的Expected Return,這個Function稱為價值函數(Value Function),可以寫作:
https://ithelp.ithome.com.tw/upload/images/20200903/20129922VmrVxk6FcE.png
https://chart.googleapis.com/chart?cht=tx&chl=V(s)底下有一個https://chart.googleapis.com/chart?cht=tx&chl=%5Cpi用來表示這個function是依據策略https://chart.googleapis.com/chart?cht=tx&chl=%5Cpi來決定值的。

另外,為了方便計算,我們可以對每個行為https://chart.googleapis.com/chart?cht=tx&chl=a都算它的價值函數,稱為動作價值函數 (Action-Value Function),表示為:
https://ithelp.ithome.com.tw/upload/images/20200903/20129922l9m80ew4bC.png
一樣https://chart.googleapis.com/chart?cht=tx&chl=%5Cpi用來表示這個function是依照策略https://chart.googleapis.com/chart?cht=tx&chl=%5Cpi來決定

可以看出來,Value Function其實就是Action-Value Function的和:
https://chart.googleapis.com/chart?cht=tx&chl=V_%7B%5Cpi%7D(s)%20%3D%20%5Csum%5Climits_%7Ba%5Cin%20A(s)%7Dq_%7B%5Cpi%7D(s%5C%20%2C%5C%20a)

貝爾曼方程(Bellman Function)

這邊推導看過就好,結果比較重要

https://chart.googleapis.com/chart?cht=tx&chl=V(s)展開
https://ithelp.ithome.com.tw/upload/images/20200903/20129922i5VrbgvXTD.png

這邊https://chart.googleapis.com/chart?cht=tx&chl=%5Csum因篇幅關係沒有加上集合範圍,可以參考底部公式的範圍,
https://chart.googleapis.com/chart?cht=tx&chl=%5Cgamma前方的https://chart.googleapis.com/chart?cht=tx&chl=%5Cinfty只是方便理解,實際上可用上方講的https://chart.googleapis.com/chart?cht=tx&chl=G_%7Bt%7D取代

先把https://chart.googleapis.com/chart?cht=tx&chl=G_%7Bt%7D根據定義的公式拆開,再把期望值分為兩部分。

  1. https://ithelp.ithome.com.tw/upload/images/20200903/201299224fDR3alfS0.png
  2. https://ithelp.ithome.com.tw/upload/images/20200903/20129922X2j0gq8dvJ.png

第一部分根據期望值的定義展開,這邊的隨機變數為https://chart.googleapis.com/chart?cht=tx&chl=R_%7Bt%2B1%7D且機率為https://chart.googleapis.com/chart?cht=tx&chl=p(r%5C%20%5Cmid%5C%20%5C%20s%5C%20%2C%5C%20a),依照昨天最後講的公式,可以得到https://chart.googleapis.com/chart?cht=tx&chl=p(r%5C%20%5Cmid%5C%20%5C%20s%5C%20%2C%5C%20a)%20%3D%20%5Csum%5Climits_%7Bs%5E%7B'%7D%7Dp(s%5E%7B'%7D%5C%20%2C%5C%20r%5C%20%5Cmid%5C%20%5C%20s%5C%20%2C%5C%20a)
接著根據期望值的定義:隨機變數*對應隨機變數出現的機率,得到https://chart.googleapis.com/chart?cht=tx&chl=%5Csum%5Climits_%7Bs%5E%7B'%7D%5Cin%20S%7D%5Csum%5Climits_%7Br%5Cin%20R(s)%7Dp(s%5E%7B'%7D%5C%20%2C%5C%20r%5C%20%5Cmid%5C%20%5C%20s%5C%20%2C%5C%20a)
最後我們是計算在策略https://chart.googleapis.com/chart?cht=tx&chl=%5Cpi下的值,每一個Action都有固定的比例對這個State上的Value做出貢獻,我們可以想成每一個Action對這個期望值有一定的權重。以上面迷宮例子來看,有25%的Reward是從https://chart.googleapis.com/chart?cht=tx&chl=a_%7Bleft%7D來的;有25%的Reward是從https://chart.googleapis.com/chart?cht=tx&chl=a_%7Bright%7D,以此類推。所以必須對每個Action都乘上Policy佔的比例。

第二部分跟上面很像,差別在於這邊期望值裡的隨機變數為https://chart.googleapis.com/chart?cht=tx&chl=%5Cgamma%5Ccdot%20%5Csum%5Climits_%7Bk%3D0%7D%5E%7B%5Cinfty%7D%5Cgamma%5E%7Bk%7DR_%7Bt%2Bk%2B2%7D,我們可以仿造第一部分的公式展開,你會發現式子中的https://chart.googleapis.com/chart?cht=tx&chl=%5Csum會根據下一個State的不同而改變。我們可以只專注在下一個State與它的機率,剩下部分就留給下下一個State去考慮就好。所以我們用下個State的期望值來解決https://chart.googleapis.com/chart?cht=tx&chl=%5Csum不同的問題,但要記得我們需要考慮下個State的所有可能。

事實上,這邊用到的是全期望公式
詳細推導可以看這篇

仔細看第二部分,其實就是原式在https://chart.googleapis.com/chart?cht=tx&chl=V(s%5E%7B'%7D)時的情形,所以把它換成https://chart.googleapis.com/chart?cht=tx&chl=V(s%5E%7B'%7D)
最後把同項的合在一起,再寫成期望值的定義就好了。

這個公式就叫做貝爾曼方程(Bellman Function),仔細看它的結構,原本我們需要算時間點https://chart.googleapis.com/chart?cht=tx&chl=t~https://chart.googleapis.com/chart?cht=tx&chl=T的Return,這是件非常麻煩的事,你要記錄每個時間點https://chart.googleapis.com/chart?cht=tx&chl=t的Return值,並且要等到return收斂後才能更新。但是Bellman Function將所有State的關係壓縮為只跟後一個State有關,這種不需要等return收斂就能更新的方法稱為Bootstrapping

https://chart.googleapis.com/chart?cht=tx&chl=V(s)的Bellman Function形式,當然也有https://chart.googleapis.com/chart?cht=tx&chl=q(s%5C%20%5Cmid%5C%20%2C%5C%20%5C%20a)的形式
https://ithelp.ithome.com.tw/upload/images/20200903/20129922jMuijd8iwt.png

可以看到Action-Value的Bellman Function只是把https://chart.googleapis.com/chart?cht=tx&chl=V(s)https://chart.googleapis.com/chart?cht=tx&chl=%5Cpi部分拿掉,這是因為Action-value已經選擇特定的Action,其他Action對期望值的影響都為0,因為不可能會選到除了https://chart.googleapis.com/chart?cht=tx&chl=a以外的Action。

總結

看數學式子看到眼睛快花掉,明天終於要寫Code啦XD
Bellman Function可以很有效率地減少運算所需的記憶體,接來下我們就可以求出Bellman Function的解,根據這個解來找出最佳策略!


上一篇
[Day02]馬可夫決策過程
下一篇
[Day04]動態規劃
系列文
從根本學習Reinforcement Learning12
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言